Hibernate হল একটি Java ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা Java ক্লাসগুলোকে ডেটাবেস টেবিলের সাথে ম্যাপিং করার জন্য ব্যবহৃত হয়। Hibernate ডেটাবেস অপারেশন সহজ করে তোলে, যেমন ইনসার্ট, আপডেট, ডিলিট এবং সিলেক্ট। Hibernate কনফিগারেশন সাধারণত দুইটি উপায়ে করা হয়:
hibernate.cfg.xml
(XML কনফিগারেশন)এখানে Hibernate Configuration এর বিস্তারিত আলোচনা করা হবে, যেখানে hibernate.cfg.xml
এবং Annotations ব্যবহার করে কনফিগারেশন কিভাবে করা যায় তা দেখানো হবে।
hibernate.cfg.xml
Hibernate ফ্রেমওয়ার্কের hibernate.cfg.xml
ফাইলটি ডেটাবেসের সাথে সংযোগ স্থাপন এবং Hibernate সেশন ফ্যাকটরি কনফিগার করার জন্য ব্যবহৃত হয়। এটি সাধারণত src/main/resources
ফোল্ডারে রাখা হয়।
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- JDBC Database connection settings -->
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_database_name</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- Specify dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.c3p0.validate">true</property>
<!-- Disable the second-level cache -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml
:hibernate.connection.driver_class
: ড্রাইভার ক্লাস যা JDBC কানেকশনের জন্য ব্যবহৃত হয়।hibernate.connection.url
: ডাটাবেস URL।hibernate.connection.username
এবং hibernate.connection.password
: ডাটাবেসের ইউজারনেম এবং পাসওয়ার্ড।hibernate.dialect
: Hibernate এর জন্য ডেটাবেস ডায়ালেক্ট (এটি Hibernate কে বলে দেয় ডেটাবেসের সাথে কিভাবে কাজ করতে হবে)।hibernate.show_sql
: এটি Hibernate কে বলে দেয় যে SQL কোয়েরি আউটপুটে প্রদর্শন করতে হবে কিনা।hibernate.hbm2ddl.auto
: Hibernate এর স্কিমা অটো-জেনারেট করার জন্য ব্যবহৃত হয়, যেমন update
, create
, বা create-drop
।Hibernate এ Annotations ব্যবহার করে কনফিগারেশন অনেক সহজ এবং কোড-সেন্ট্রিক পদ্ধতি। আপনি Java ক্লাসে JPA (Java Persistence API) অ্যানোটেশন ব্যবহার করে Hibernate সেটআপ করতে পারেন।
Hibernate Entity Class with Annotations: Hibernate Entity Class (Java Bean) তৈরি করুন এবং এটি @Entity
, @Table
, @Id
ইত্যাদি অ্যানোটেশন দ্বারা চিহ্নিত করুন।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "student")
public class Student {
@Id
private int id;
private String name;
private String course;
// Getters and setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
}
এখানে, @Entity
ক্লাসটিকে Hibernate Entity হিসেবে চিহ্নিত করে এবং @Table
এটি কী টেবিলের সাথে ম্যাপ করা হবে তা নির্ধারণ করে। @Id
অ্যানোটেশনটি সেই ফিল্ডকে চিহ্নিত করে যেটি প্রাইমারি কী হিসেবে কাজ করবে।
Hibernate Configuration Class (HibernateUtil): আপনি Hibernate সেশন ফ্যাকটরি তৈরি করতে একটি Utility ক্লাস তৈরি করতে পারেন যা Hibernate সেটআপ পরিচালনা করবে।
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Student.class) // Adding annotated class
.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
এখানে, addAnnotatedClass()
ব্যবহার করে Hibernate Entity ক্লাসটি সেশন ফ্যাকটরিতে অ্যাড করা হয়েছে।
Main Class to Test Hibernate Configuration: Hibernate সেশন ফ্যাকটরি ব্যবহার করে ডেটাবেসে ডেটা ইনসার্ট এবং রিট্রিভ করার জন্য Main ক্লাস লিখুন।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class MainApp {
public static void main(String[] args) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.getCurrentSession();
try {
// Create a new Student object
Student student = new Student();
student.setName("John Doe");
student.setCourse("Java Programming");
// Start a transaction
session.beginTransaction();
// Save the student object
session.save(student);
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এই ক্লাসে:
Student
অবজেক্ট তৈরি করা হয়েছে এবং ডেটাবেসে সেভ করা হয়েছে।hibernate.cfg.xml
and Annotations Configuration:ফিচার | hibernate.cfg.xml | Annotations |
---|---|---|
Configuration Style | XML ফাইল ব্যবহার করা হয়। | Java ক্লাসে অ্যানোটেশন ব্যবহার করা হয়। |
Ease of Use | কিছুটা বেশি জটিল, বড় XML ফাইল লাগে। | কমপ্যাক্ট এবং কোড-সেন্ট্রিক, অ্যানোটেশন সরাসরি ব্যবহার করা যায়। |
Flexibility | XML ফাইল দ্বারা কনফিগারেশন করা যায়, সেন্ট্রাল কনফিগারেশন। | Java ক্লাসে কনফিগারেশন, কোডের মধ্যে থাকতে পারে। |
Maintainability | বেশি সেন্ট্রালাইজড, সব কনফিগারেশন এক জায়গায় থাকে। | কোডের মধ্যে ইনলাইন কনফিগারেশন যা সহজে রিফ্যাক্টর করা যায়। |
Validation | XML Schema দ্বারা কনফিগারেশন বৈধকরণ। | অ্যানোটেশন দ্বারা সরাসরি টাইপ চেকিং। |
hibernate.cfg.xml
: এটি ঐতিহ্যবাহী কনফিগারেশন পদ্ধতি যেখানে XML ফাইলে সমস্ত কনফিগারেশন স্টেটমেন্ট থাকে। এটি বেশি কনফিগারেবল, তবে কিছুটা ভারী হতে পারে এবং XML স্কিমা ফাইল ব্যবহারের প্রয়োজন হতে পারে।উপযুক্ত কনফিগারেশন পদ্ধতি নির্বাচন নির্ভর করে আপনার প্রকল্পের আকার এবং প্রয়োজনীয়তার উপর।
Read more